---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.12.0
  labels:
    heritage: deckhouse
    module: node-manager
    cluster.x-k8s.io/provider: cluster-api
  name: machinehealthchecks.cluster.x-k8s.io
spec:
  group: cluster.x-k8s.io
  names:
    categories:
      - cluster-api
    kind: MachineHealthCheck
    listKind: MachineHealthCheckList
    plural: machinehealthchecks
    singular: machinehealthcheck
  scope: Namespaced
  versions:
    - additionalPrinterColumns:
        - description: Cluster
          jsonPath: .spec.clusterName
          name: Cluster
          type: string
        - description: Number of machines currently monitored
          jsonPath: .status.expectedMachines
          name: ExpectedMachines
          type: integer
        - description: Maximum number of unhealthy machines allowed
          jsonPath: .spec.maxUnhealthy
          name: MaxUnhealthy
          type: string
        - description: Current observed healthy machines
          jsonPath: .status.currentHealthy
          name: CurrentHealthy
          type: integer
        - description: Time duration since creation of MachineHealthCheck
          jsonPath: .metadata.creationTimestamp
          name: Age
          type: date
      name: v1beta1
      schema:
        openAPIV3Schema:
          description: MachineHealthCheck is the Schema for the machinehealthchecks
            API.
          properties:
            apiVersion:
              description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
              type: string
            kind:
              description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
              type: string
            metadata:
              type: object
            spec:
              description: Specification of machine health check policy
              properties:
                clusterName:
                  description: ClusterName is the name of the Cluster this object belongs
                    to.
                  minLength: 1
                  type: string
                maxUnhealthy:
                  anyOf:
                    - type: integer
                    - type: string
                  description: Any further remediation is only allowed if at most "MaxUnhealthy"
                    machines selected by "selector" are not healthy.
                  x-kubernetes-int-or-string: true
                nodeStartupTimeout:
                  description: Machines older than this duration without a node will
                    be considered to have failed and will be remediated. If not set,
                    this value is defaulted to 10 minutes. If you wish to disable this
                    feature, set the value explicitly to 0.
                  type: string
                remediationTemplate:
                  description: "RemediationTemplate is a reference to a remediation
                  template provided by an infrastructure provider. \n This field is
                  completely optional, when filled, the MachineHealthCheck controller
                  creates a new object from the template referenced and hands off
                  remediation of the machine to a controller that lives outside of
                  Cluster API."
                  properties:
                    apiVersion:
                      description: API version of the referent.
                      type: string
                    fieldPath:
                      description: 'If referring to a piece of an object instead of
                      an entire object, this string should contain a valid JSON/Go
                      field access statement, such as desiredState.manifest.containers[2].
                      For example, if the object reference is to a container within
                      a pod, this would take on a value like: "spec.containers{name}"
                      (where "name" refers to the name of the container that triggered
                      the event) or if no container name is specified "spec.containers[2]"
                      (container with index 2 in this pod). This syntax is chosen
                      only to have some well-defined way of referencing a part of
                      an object. TODO: this design is not final and this field is
                      subject to change in the future.'
                      type: string
                    kind:
                      description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                      type: string
                    name:
                      description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                      type: string
                    namespace:
                      description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                      type: string
                    resourceVersion:
                      description: 'Specific resourceVersion to which this reference
                      is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                      type: string
                    uid:
                      description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                      type: string
                  type: object
                  x-kubernetes-map-type: atomic
                selector:
                  description: Label selector to match machines whose health will be
                    exercised
                  properties:
                    matchExpressions:
                      description: matchExpressions is a list of label selector requirements.
                        The requirements are ANDed.
                      items:
                        description: A label selector requirement is a selector that
                          contains values, a key, and an operator that relates the key
                          and values.
                        properties:
                          key:
                            description: key is the label key that the selector applies
                              to.
                            type: string
                          operator:
                            description: operator represents a key's relationship to
                              a set of values. Valid operators are In, NotIn, Exists
                              and DoesNotExist.
                            type: string
                          values:
                            description: values is an array of string values. If the
                              operator is In or NotIn, the values array must be non-empty.
                              If the operator is Exists or DoesNotExist, the values
                              array must be empty. This array is replaced during a strategic
                              merge patch.
                            items:
                              type: string
                            type: array
                        required:
                          - key
                          - operator
                        type: object
                      type: array
                    matchLabels:
                      additionalProperties:
                        type: string
                      description: matchLabels is a map of {key,value} pairs. A single
                        {key,value} in the matchLabels map is equivalent to an element
                        of matchExpressions, whose key field is "key", the operator
                        is "In", and the values array contains only "value". The requirements
                        are ANDed.
                      type: object
                  type: object
                  x-kubernetes-map-type: atomic
                unhealthyConditions:
                  description: UnhealthyConditions contains a list of the conditions
                    that determine whether a node is considered unhealthy.  The conditions
                    are combined in a logical OR, i.e. if any of the conditions is met,
                    the node is unhealthy.
                  items:
                    description: UnhealthyCondition represents a Node condition type
                      and value with a timeout specified as a duration.  When the named
                      condition has been in the given status for at least the timeout
                      value, a node is considered unhealthy.
                    properties:
                      status:
                        minLength: 1
                        type: string
                      timeout:
                        type: string
                      type:
                        minLength: 1
                        type: string
                    required:
                      - status
                      - timeout
                      - type
                    type: object
                  minItems: 1
                  type: array
                unhealthyRange:
                  description: 'Any further remediation is only allowed if the number
                  of machines selected by "selector" as not healthy is within the
                  range of "UnhealthyRange". Takes precedence over MaxUnhealthy. Eg.
                  "[3-5]" - This means that remediation will be allowed only when:
                  (a) there are at least 3 unhealthy machines (and) (b) there are
                  at most 5 unhealthy machines'
                  pattern: ^\[[0-9]+-[0-9]+\]$
                  type: string
              required:
                - clusterName
                - selector
                - unhealthyConditions
              type: object
            status:
              description: Most recently observed status of MachineHealthCheck resource
              properties:
                conditions:
                  description: Conditions defines current service state of the MachineHealthCheck.
                  items:
                    description: Condition defines an observation of a Cluster API resource
                      operational state.
                    properties:
                      lastTransitionTime:
                        description: Last time the condition transitioned from one status
                          to another. This should be when the underlying condition changed.
                          If that is not known, then using the time when the API field
                          changed is acceptable.
                        format: date-time
                        type: string
                      message:
                        description: A human readable message indicating details about
                          the transition. This field may be empty.
                        type: string
                      reason:
                        description: The reason for the condition's last transition
                          in CamelCase. The specific API may choose whether or not this
                          field is considered a guaranteed API. This field may not be
                          empty.
                        type: string
                      severity:
                        description: Severity provides an explicit classification of
                          Reason code, so the users or machines can immediately understand
                          the current situation and act accordingly. The Severity field
                          MUST be set only when Status=False.
                        type: string
                      status:
                        description: Status of the condition, one of True, False, Unknown.
                        type: string
                      type:
                        description: Type of condition in CamelCase or in foo.example.com/CamelCase.
                          Many .condition.type values are consistent across resources
                          like Available, but because arbitrary conditions can be useful
                          (see .node.status.conditions), the ability to deconflict is
                          important.
                        type: string
                    required:
                      - lastTransitionTime
                      - status
                      - type
                    type: object
                  type: array
                currentHealthy:
                  description: total number of healthy machines counted by this machine
                    health check
                  format: int32
                  minimum: 0
                  type: integer
                expectedMachines:
                  description: total number of machines counted by this machine health
                    check
                  format: int32
                  minimum: 0
                  type: integer
                observedGeneration:
                  description: ObservedGeneration is the latest generation observed
                    by the controller.
                  format: int64
                  type: integer
                remediationsAllowed:
                  description: RemediationsAllowed is the number of further remediations
                    allowed by this machine health check before maxUnhealthy short circuiting
                    will be applied
                  format: int32
                  minimum: 0
                  type: integer
                targets:
                  description: Targets shows the current list of machines the machine
                    health check is watching
                  items:
                    type: string
                  type: array
              type: object
          type: object
      served: true
      storage: true
      subresources:
        status: {}
